package com.zzyl.nursing.service;

import java.util.List;

import com.zzyl.common.core.domain.AjaxResult;
import com.zzyl.nursing.domain.Device;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zzyl.nursing.dto.DeviceDto;
import com.zzyl.nursing.dto.QueryDeviceDataHistoryDto;
import com.zzyl.nursing.vo.*;

/**
 * IoT设备管理Service接口
 * 
 * @author laoYe
 * @date 2025-10-28
 */
public interface IDeviceService extends IService<Device> {
    /**
     * 查询IoT设备管理
     * 
     * @param id IoT设备管理主键
     * @return IoT设备管理
     */
    Device selectDeviceById(Long id);

    /**
     * 查询IoT设备管理列表
     * 
     * @param device IoT设备管理
     * @return IoT设备管理集合
     */
    List<Device> selectDeviceList(Device device);

    /**
     * 新增IoT设备管理
     * 
     * @param dto IoT设备管理
     * @return 结果
     */
    void insertDevice(DeviceDto dto);

    /**
     * 修改IoT设备管理
     * 
     * @param device IoT设备管理
     * @return 结果
     */
    int updateDevice(Device device);

    /**
     * 批量删除IoT设备管理
     * 
     * @param ids 需要删除的IoT设备管理主键集合
     * @return 结果
     */
    int deleteDeviceByIds(Long[] ids);

    /**
     * 删除IoT设备管理信息
     * 
     * @param id IoT设备管理主键
     * @return 结果
     */
    int deleteDeviceById(Long id);

    /**
     * 同步IoT平台产品列表
     */
    void syncProductList();

    /**
     * 查询所有的产品列表
     * @return
     */
    List<ProductVo> getAllProducts();

    /**
     *  根据iotId获取IoT设备管理详细信息
     * @param iotId
     * @return
     */
    DeviceDetailVo selectDeviceByIotId(String iotId);

    /**
     * 查询设备上报的最新数据
     * @param iotId
     * @return
     */
    List<DeviceShadowDataVo> queryServiceProperties(String iotId);

    /**
     * 查询产品详情(报警规则模块使用)
     * @param productKey
     * @return
     */
    AjaxResult queryProduct(String productKey);

//    /**
//     * 按天统计查询指标数据
//     * @param dto
//     * @return
//     */
//    List<DeviceFunctionDataVo> queryDeviceDataListByDay(QueryDeviceDataHistoryDto dto);

    /**
     * 按周统计查询指标数据
     * @param dto
     * @return
     */
    List<DeviceFunctionDataVo> queryDeviceDataListByWeek(QueryDeviceDataHistoryDto dto);
}
